Snowball_233

Snowball_233

A student who is learning coding.

不要過多的在意你的伺服器核心與 JDK 發行版

近期在苦力怕論壇伺服器插件板塊群 (群號 332359582) 被詢問最多的問題莫過於:我要選什麼伺服器核心?Folia 可以嗎?我是用 Oracle 還是 Zulu?性能報告分析用 Spark 還是 Timing?等等諸如此類的實際上其實是無關緊要的問題。

在看到這些提問之後,我意識到一個問題,隨著我的世界開服成本的逐漸降低,有著越來越多的萌新也想要嘗試開服,想著開一個伺服器火爆全網,正因如此,他們想要把伺服器做得更好,但是也正因如此,他們將關注點放在了錯誤的地方上。真正的服主需要著眼於伺服器的內容、平衡、社群、玩家,那麼接下來我就要向你解釋,為什麼不要過多的關注其他的內容。

服務端的選擇#

目前市面上的 Java 服務端主要分為以下幾類:

類型名稱適用範圍
原版服務端Vanilla我的世界官方服務端,不能加載插件或模組
純插件服務端Bukkit、Spigot、Paper、PurPur、Pufferfish、Folia只可以加載伺服器插件的服務端,不可以加載模組
純模組服務端Forge、Fabric、SpongeForge只可以加載模組的服務端,不可以加載服務端插件
混合服務端CatServer、Mohist、Banner、Arclight可同時加載服務端插件與模組

其中,爭議最多的話題就是,我是否應該使用 Folia?這個問題的提出,顯然是受到了它以多線程所著名的影響,但是,讓我們來重新閱讀一下 Folia 官網 對其服務端的定位:

Folia is designed to address the constant bottleneck of the Minecraft server running on a single thread causing performance issues. It is by no means a drop-in replacement for Paper.
---------
Folia 旨在解決 Minecraft 伺服器在單個線程上運行導致性能瓶頸的問題。它絕不是 Paper 的替代品。

再細細品味一下這句話,你還認為你真的需要 Folia 嗎?“它絕不是 Paper 的替代品。” 簡明扼要地指出了其與 Paper 服務端是不同的,具體來說,從遊玩體驗、插件適配、穩定性上來說與 Paper 服務端都相差很大,並且它破壞了很多原版特性,難道你真的願意為了所謂的極致性能去放棄上述所有內容嗎?

讓我們再來看看 Folia 官方所推薦的配置:

What hardware will Folia run best on?
Ideally, at least 16 cores (not threads).
---------
Folia 在什麼硬件上運行得最好?
理想情況下,至少有16個內核(不是線程)。

所以敢問你的伺服器硬件配置真的達到了推薦配置嗎?你又如何保證在低於推薦配置的情況下性能仍然比傳統 Paper 服務端好?

JDK 發行版的選擇#

JDK (Java Development Kit),Java 開發套件,是提供開發者使用的套件,JDK 內 包含了 JRE (Java Runtime Environment),而 JVM (Java Virturl Machine) 是 JRE 的一部分,所有 Java 程序都基於 JVM 運行。

目前,在 Minecraft 伺服器中較為主流的 JDK 發行版包括:OpenJDK、Azul Zulu、GraalVM、Oracle JDK 等。

其中,我以 OpenJDK 與 Azul Zulu 這兩個爭議最多的發行版為例子進行測試,測試腳本如下:

點擊預覽
#! /bin/bash

JVM_OPENJDK=openjdk-17.0.2
JVM_ZULU=zulu17.34.19-ca-jdk17.0.3-linux_x64

sudo rm -rf /home/server/jdks/test/logs*

for JVM_NAME in $JVM_OPENJDK $JVM_TEMURIN $JVM_SEMERU $JVM_ZULU $JVM_ZING; do

    echo '========================================'
    echo "Start testing $JVM_NAME"
    echo '========================================'

    sudo rm -rf /home/server/jdks/test/world

    mkdir logs
    sudo nice -n -20 /home/server/jdks/$JVM_NAME/bin/java \
              -Xmx6G -Xms6G -Xlog:gc:logs/gc.log -Xlog:gc* \
              -jar server.jar nogui | tee logs/full.log

    chmod 777 -R /home/server/jdks/test/logs
    mv -v /home/server/jdks/test/logs /home/server/jdks/test/logs-$JVM_NAME

    echo '========================================'
    echo "Finish testing $JVM_NAME"
    echo '========================================'

done

測試結果如下:

JDKChunky 用時平均暫停時間 /ms平均 GC 間隔 /s
OpenJDK9'01''50.68
Azul Zulu9'15''53.47

不難看出,平時這兩組爭議最多的發行版,最終測試結果也相差無幾,在實際使用與體驗中,很難察覺其中的不同。

總結#

綜上所述,不要過多關注你的伺服器核心與 JDK 發行版等這類問題上,而應把更多的精力放在遊戲內容的豐富和優化上。畢竟,玩家們真正關心的是遊戲的趣味性與體驗,而不是你選擇了哪個技術方案。希望你能把更多的時間投入到伺服器的內容建設上,讓你的玩家們在你的伺服器中收穫更多的樂趣和回憶。

此文由 Mix Space 同步更新至 xLog
原始鏈接為 https://blog.rescueme.life/posts/develop/donot-pay-too-much-attention-to-server-core-and-JDK


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。